# -*- coding: utf-8 -*-

@auth.requires_membership('Administrator')
def modificalivelli():
    db.livelli.id.readable = False
    grid = SQLFORM.grid(db.livelli,
                        orderby = (db.livelli.ordine),
                        fields = [db.livelli.ordine, db.livelli.livello],
                        paginate = 50,
                        maxtextlength = 200,
                        details = False,
                        searchable = False,
                        csv = False)
    return locals()
#############################################################################################
#############################################################################################
#############################################################################################
@auth.requires_membership('Administrator')
def index():
    rows = db(db.categorie_test.id>0).select(orderby=db.categorie_test.categoria_test)
    return locals()

@auth.requires_membership('Administrator')
def nuovacategoriasfida():
    grid = crud.create(db.categorie_test,
                       next=URL('impostazioni', 'index'),
                       message=T("Nuova categoria inserita!"))
    grid[0][-1][1].append(A(I(_class="icon-arrow-left shaded"), T('Categorie'), _href=URL('impostazioni', 'index'), _class="btn"))
    return locals()

@auth.requires_membership('Administrator')
def modificacategoriatest():
    categoria_test_id = int(request.vars.categoria_test_id)
    categoria_test = db.categorie_test(categoria_test_id)
    rows = db(db.test.categoria_test_id==categoria_test_id).select(orderby=db.test.test)
    db.categorie_test.id.readable = db.categorie_test.id.writable = False
    grid = crud.update(db.categorie_test,
                       categoria_test,
                       next=URL('impostazioni', 'index'),
                       message=T("Categoria modificata!"),
                       deletable=False)
    grid[0][-1][1].append(A(I(_class="icon-arrow-left shaded"), T('Categorie'), _href=URL('impostazioni', 'index'), _class="btn"))
    return locals()

@auth.requires_membership('Administrator')
def eliminacategoriatest():
    categoria_test_id = int(request.vars.categoria_test_id)
    db(db.categorie_test.id==categoria_test_id).delete()
    return         
#############################################################################################
#############################################################################################
#############################################################################################
@auth.requires_membership('Administrator')
def nuovotest():
    categoria_test_id = int(request.vars.categoria_test_id)
    db.test.categoria_test_id.readable = db.test.categoria_test_id.writable = False
    db.test.categoria_test_id.default = categoria_test_id
    grid = crud.create(db.test,
                       next=URL('impostazioni', 'modificacategoriatest', vars={'categoria_test_id':categoria_test_id}),
                       message=T("Sfida inserita"))
    grid[0][-1][1].append(A(I(_class="icon-arrow-left shaded"), T('Sfide'), _href=URL('impostazioni', 'modificacategoriatest', vars={'categoria_test_id':categoria_test_id}), _class="btn"))
    return locals()

@auth.requires_membership('Administrator')
def modificatest():
    test_id = int(request.vars.test_id)
    test = db.test(test_id)
    categoria_test_id = test.categoria_test_id
    valutazione_test = getValutazioneTest(test.id)
    # Form di modifica
    db.test.categoria_test_id.readable = db.test.categoria_test_id.writable = False
    grid = crud.update(db.test,
                       test,
                       next=URL('impostazioni', 'modificacategoriatest', vars={'categoria_test_id':categoria_test_id}),
                       message=T("Sfida modificata!"),
                       deletable=False)
    grid[0][-1][1].append(A(I(_class="icon-arrow-left shaded"), T('Sfide'), _href=URL('impostazioni', 'modificacategoriatest', vars={'categoria_test_id':categoria_test_id}), _class="btn"))
    return locals()

@auth.requires_membership('Administrator')
def eliminatest():
    test_id = int(request.vars.test_id)
    db(db.test.id==test_id).delete()
    return

#############################################################################################
#############################################################################################
#############################################################################################
def modificascalevalutazione():
    test_id = int(request.vars.test_id)
    test = db.test(test_id)
    db.scale_valutazione.id.readable = False
    db.scale_valutazione.test_id.readable = db.scale_valutazione.test_id.writable = False
    db.scale_valutazione.test_id.default = test_id
    grid = SQLFORM.grid(db.scale_valutazione.test_id==test_id,
                        orderby = (db.scale_valutazione.pesoinizio, db.scale_valutazione.pesofine),
                        paginate = 50,
                        maxtextlength = 200,
                        details = False,
                        searchable = False,
                        csv = False)
    return locals()

def copiascalavalutazione():
    test = db.test(int(request.vars.test_id))
    scala_valutazione = db.scale_valutazione(int(request.vars.scala_valutazione_id))
    form = SQLFORM.factory(Field('descrizione', 'string', required=True, default="%s (Copia)"%scala_valutazione.descrizione),
                           Field('sesso_id', 'reference sessi', requires=IS_IN_DB(db, 'sessi.id', '%(sesso)s'), default=scala_valutazione.sesso_id, label=T("Sesso")),
                           Field('pesoinizio', 'integer', required=True, default=scala_valutazione.pesoinizio, label=T("Peso da")),
                           Field('pesofine', 'integer', required=True, default=scala_valutazione.pesofine, label=T("Peso a")),
                           Field('etainizio', 'integer', required=True, default=scala_valutazione.etainizio, label=T("Età da")),
                           Field('etafine', 'integer', required=True, default=scala_valutazione.etafine, label=T("Età a")),
                           Field('maggiorazione', 'integer', required=True, default=0, label=T("Maggiorazione")))
    if form.accepts(request.vars, session):
        insert_dict = db.scale_valutazione._filter_fields(form.vars)
        insert_dict["test_id"] = test.id
        if db((db.scale_valutazione.test_id==insert_dict["test_id"])&
              (db.scale_valutazione.sesso_id==insert_dict["sesso_id"])&
              (db.scale_valutazione.pesoinizio<=insert_dict["pesoinizio"])&
              (db.scale_valutazione.pesofine>=insert_dict["pesofine"])&
              (db.scale_valutazione.etainizio<=insert_dict["etainizio"])&
              (db.scale_valutazione.etafine>=insert_dict["etafine"])).select(db.scale_valutazione.id).first()==None:
            scala_valutazione_id = db.scale_valutazione.insert(**insert_dict)
            for risultato in db(db.risultati.scala_valutazione_id==scala_valutazione.id).select():
                insert_dict = dict()
                insert_dict["scala_valutazione_id"] = scala_valutazione_id
                insert_dict["livello_id"] = risultato.livello_id
                insert_dict["risultato"] = risultato.risultato+int(form.vars.maggiorazione)
                db.risultati.insert(**insert_dict)
            session.flash = T("Scala di valutazione inserita")
            redirect(URL('impostazioni', 'modificatest', vars={"test_id":request.vars.test_id}))
        else:
            session.flash = T("Impossibile duplicare la scala di valutazione, i criteri inseriti corrispondono con una già esistente")
            redirect(URL('impostazioni', 'copiascalavalutazione', vars={"test_id":request.vars.test_id, 'scala_valutazione_id':request.vars.scala_valutazione_id}))
    return locals()

def modificarisultati():
    scala_valutazione_id = int(request.vars.scala_valutazione_id)
    scala_valutazione = db.scale_valutazione(scala_valutazione_id)
    test_id = int(request.vars.test_id)
    test = db.test(test_id)
    db.risultati.id.readable = False
    db.risultati.scala_valutazione_id.readable = db.risultati.scala_valutazione_id.writable = False
    db.risultati.scala_valutazione_id.default = scala_valutazione_id
    grid = SQLFORM.grid(db.risultati.scala_valutazione_id==scala_valutazione_id,
                        orderby = (db.risultati.livello_id),
                        paginate = 50,
                        maxtextlength = 200,
                        details = False,
                        searchable = False,
                        csv = False)
    return locals()

def eliminascalavalutazione():
    scala_valutazione_id = int(request.vars.scala_valutazione_id)
    test_id = int(request.vars.test_id)
    db(db.scale_valutazione.id==scala_valutazione_id).delete()
    session.flash = "Scala di valutazione eliminata!"
    redirect(URL('impostazioni', 'modificatest', vars={'test_id':test_id}))
